Fric-frac MySQL Data Definition Language
Home

Fric-frac MySQL Data Definition Language

Fric-frac MySQL Data Definition Language

We maken scripts om de database en de tabellen voor de Fric-frac Event kalender aan te maken.

Probleem

We maken de database en de tabellen niet aan met behulp van een visuele designer maar met behulp van SQL scripts.

Design

Vooraleer de database of een tabel te maken gaan we na als die al bestaat. Indien dit het geval is, deleten we eerst de tabel.

Oplossing

  1. Globals instellen

    Je stelt die alleen in op je lokale MySQL Server, niet op de remote SQL server.

    SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    SET GLOBAL sql_mode = 'ANSI';
  2. Database maken

    Je creëert een database alleen op je lokale MySQL Server, niet op de remote SQL server. Gebruik je de naam van je eigen database.

    -- If database does not exist, create the database
    CREATE DATABASE IF NOT EXISTS docent1;
    
  3. Database activeren

    Gebruik je de naam van je eigen database.

    USE docent1;
  4. Foreign Key constraints opheffen
    -- With the MySQL FOREIGN_KEY_CHECKS variable,
    -- you don't have to worry about the order of your
    -- DROP and CREATE TABLE statements at all, and you can
    -- write them in any order you like, even the exact opposite.
    SET FOREIGN_KEY_CHECKS = 0;
    
  5. DDL voor EventCategory

    Over de tabel EventCategory valt niet veel te zeggen. De klom Id is de hoofdsleutel. Met AUTO_INCREMENT wordt de waarde in de kolom Id telkens met 1 vermeerderd. En we voegen er de constraint NOT NULL aan toe om de vermijden dat die leeg zou zijn. Let erop hoe we een UNIQUE constraint toevoegen voor de kolom Name. Vooraleer de tabel te creëren gaan we na of de tabel al bestaat. Als de tabel bestaat wordt die eerst verwijderd.

    -- modernways.be
    -- created by an orm apart
    -- Entreprise de modes et de manières modernes
    -- MySql: CREATE TABLE EventCategory
    -- Created on Monday 4th of September 2017 02:57:37 PM
    --
    
    DROP TABLE IF EXISTS `EventCategory`;
    CREATE TABLE `EventCategory` (
        `Name` NVARCHAR (120) NOT NULL,
        `Id` INT NOT NULL AUTO_INCREMENT,
        CONSTRAINT PRIMARY KEY(Id),
        CONSTRAINT uc_EventCategory_Name UNIQUE (Name));
    
  6. DDL voor EventTopic

    Deze tabel is gelijkaardig aan de EventCategory tabel.

    -- modernways.be
    -- created by an orm apart
    -- Entreprise de modes et de manières modernes
    -- MySql: CREATE TABLE EventTopic
    -- Created on Tuesday 17th of March 2020 01:43:17 PM
    -- 
    DROP TABLE IF EXISTS `EventTopic`;
    CREATE TABLE `EventTopic` (
    	`Name` NVARCHAR (120) NOT NULL,
    	`Id` INT NOT NULL AUTO_INCREMENT,
    	CONSTRAINT PRIMARY KEY(Id),
    	CONSTRAINT uc_EventTopic_Name UNIQUE (Name));
    
  7. DDL voor Event

    Dit is een interessantere tabel. Zoals je hieronder ziet zijn er twee vreemde sleutels. Eén die verwijst naar de categorieën en een andere naar de topics. We voegen ook de NOT NULL constraints toe die in het logisch model zijn opgeslagen.

    -- modernways.be
    -- created by an orm apart
    -- Entreprise de modes et de manières modernes
    -- MySql: CREATE TABLE Event
    -- Created on Tuesday 17th of March 2020 01:43:17 PM
    -- 
    DROP TABLE IF EXISTS `Event`;
    CREATE TABLE `Event` (
    	`Name` NVARCHAR (120) NOT NULL,
    	`Location` NVARCHAR (120) NOT NULL,
    	`Starts` DATETIME NULL,
    	`Ends` DATETIME NULL,
    	`Image` NVARCHAR (255) NOT NULL,
    	`Description` NVARCHAR (1024) NOT NULL,
    	`OrganiserName` NVARCHAR (120) NOT NULL,
    	`OrganiserDescription` NVARCHAR (120) NOT NULL,
    	`EventCategoryId` INT NULL,
    	`EventTopicId` INT NULL,
    	`Id` INT NOT NULL AUTO_INCREMENT,
    	CONSTRAINT PRIMARY KEY(Id),
    	CONSTRAINT fk_EventEventCategoryId FOREIGN KEY (`EventCategoryId`) REFERENCES `EventCategory` (`Id`),
    	CONSTRAINT fk_EventEventTopicId FOREIGN KEY (`EventTopicId`) REFERENCES `EventTopic` (`Id`));
    
  8. Foreign Key constraints terug instellen
    -- With the MySQL FOREIGN_KEY_CHECKS variable,
    -- you don't have to worry about the order of your
    -- DROP and CREATE TABLE statements at all, and you can
    -- write them in any order you like, even the exact opposite.
    SET FOREIGN_KEY_CHECKS = 1;
    

JI
2020-03-17 15:36:51